| PWJ1570 - 94/12 |
この資料は以下の製品について記述したものです。
この資料はダイアログやウィンドウ上にあるコントロールにフォーカスが来た時に特別な処理をさせたい場合に利用するサブクラス化の手順について説明したものです。
エディットやリストボックスなどのコントロールも一般のウィンドウと同じように内部的にコールバック関数を持っています。元々コントロールが持っているコールバック関数の代わりにユーザが自分でコールバック関数を割り当てることが出来ます。
以下に簡単な例を示します。
HANDLE hControl;
FARPROC lpfnOldProc, lpfnNewProc;
:
:
/* コントロールの既存コールバック関数のアドレスを取得 */
lpfnOldProc = (FARPROC)GetWindowLong(hControl, GWL_WNDPROC);
/* ユーザが作成した新しいコールバック関数を割り当てる */
lpfnNewProc = MakeProcInstance( NewFunc, hInstance);
SetWindowLong(hControl, GWL_WNDPROC, (LONG)lpfnNewProc);
:
:
/* 新しいコールバック関数 */
long FAR PASCAL _export NewFunc(HWND hWnd, UINT message, UINT wParam,
LONG lParam)
{
if(wParam == WM_SETFOCUS)
{
/* コントロールにフォーカスが来た時の処理を書く */
}
/* 自分の処理以外はすべて既存のコールバック関数に処理させる */
return CallWindowProc(lpfnOldProc, message, wParam, lParam);
}
if(wParam == WM_SETFOCUS)
{
/* コントロールにフォーカスが来た時の処理を書く */
}
/* 自分の処理以外はすべて既存のコールバック関数に処理させる */
return CallWindowProc(lpfnOldProc, message, wParam, lParam);
}
これを使えば複数のコントロールに同一の処理をさせるようにすることができます。
これをウィンドウのサブクラス化と言います。この資料はダイアログボックスにアイコンを割り当てる手順についての一つの方法を紹介したものです。
マイクロソフト株式会社 テクニカル サポート
![]() UP |
![]() HOMEPAGE |